Micron Document
<!DOCTYPE html>
<html class="client-nojs vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-0 vector-toc-not-available vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-0 skin-theme-clientpref-day vector-sticky-header-enabled" lang="de" dir="ltr"><head>
<meta charset="UTF-8">
<title>Byte-Reihenfolge</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" type="image/png" href="./_res_/favicon.png">
<link rel="canonical" href="https://de.wikipedia.org/wiki/Byte-Reihenfolge"> <link href="./_mw_/ext.cite.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.pygments.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.wikimediamessages.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link href="./_mw_/ext.gadget.citeRef.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.defaultPlainlinks.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonHide.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonLayout.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonStyle.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiDarkmode.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiResponsive.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.specialSearch.css" rel="stylesheet" type="text/css">
<link rel="stylesheet" type="text/css" href="./_mw_/site.styles.css">
<link rel="stylesheet" type="text/css" href="./_mw_/noscript.css">
<link rel="stylesheet" type="text/css" href="./_res_/footer.css">
<link rel="stylesheet" type="text/css" href="./_res_/vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-Byte-Reihenfolge rootpage-Byte-Reihenfolge skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading"><span class="mw-page-title-main">Byte-Reihenfolge</span></h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="contentSub">
<div id="mw-content-subtitle"></div>
</div>
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="de" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="de" dir="ltr"><p>Die <b>Byte-Reihenfolge</b> (<span style="font-style:normal;font-weight:normal"><a href="Englische_Sprache" title="Englische Sprache">englisch</a></span> <span lang="en-Latn" style="font-style:italic"><b>byte order</b></span> oder <span lang="en"><b>endianness</b></span>) bezeichnet in der <a href="Informatik" title="Informatik">Informatik</a> die Speicherorganisation für einfache Zahlenwerte, in erster Linie die Ablage <a href="Ganze_Zahl" title="Ganze Zahl">ganzzahliger</a> Werte (<a href="Integer_(Datentyp)" title="Integer (Datentyp)">Integer</a>) im <a href="Arbeitsspeicher" title="Arbeitsspeicher">Arbeitsspeicher</a>.
</p><p>Die ersten <a href="Rechnerarchitektur" title="Rechnerarchitektur">Rechnerarchitekturen</a> haben die Darstellung mehrstelliger Zahlen aus dem Alltag entsprechend der <a href="Konvention" title="Konvention">Konvention</a> des <a href="Stellenwertsystem" title="Stellenwertsystem">Stellenwertsystems</a> übernommen, zunächst für dezimal, dann auch für binär dargestellte Zahlen. In dieser Konvention beginnt die <a href="Notation" title="Notation">Notation</a> einer Zahl mit der <a href="Zahlzeichen" title="Zahlzeichen">Ziffer</a> an der höchstwertigen Stelle. Addition, Subtraktion und Multiplikation beginnen aber mit der niedrigstwertigen Ziffer, der <a href="Stellenwertsystem#Stelle_und_Stellenwert" title="Stellenwertsystem">Einerstelle</a>.
</p><p>Solange man innerhalb ähnlicher Rechnerarchitekturen blieb, musste man sich nicht um die Endianness kümmern, sie entsprach ja der gewohnten. Da die genannten drei mathematischen Grundfunktionen jedoch einen <a href="Befehlszyklus" title="Befehlszyklus">Maschinenzyklus</a> früher starten können, wenn man die Bitreihenfolge umkehrt, haben in der Folge einige Hersteller ein entsprechendes Architekturprinzip erstellt. Das heißt: die Einerstelle wird an die Anfangs<a href="Speicheradresse" title="Speicheradresse">adresse</a> gelegt, und die 3 genannten <a href="Algorithmus" title="Algorithmus">Algorithmen</a> schreiten nach rechts in die höheren Stellen und Adressen fort. Diese Abweichung vom Gewohnten machte die Begriffsbildung <i>Endianness</i> erforderlich:
</p>
<ul><li><span id="anfangHoch"></span> Beim <b>big-endian</b> (wörtlich etwa: „großendigen“, siehe auch Abschnitt <a href="#Etymologie">„Etymologie“</a>) Format wird das höchstwertige <a href="Byte" title="Byte">Byte</a> zuerst gespeichert, d.&nbsp;h. an der kleinsten Speicheradresse. Allgemein bedeutet der Begriff, dass bei zusammengesetzten Daten die höchstwertige (höchstrangige) Komponente zuerst genannt wird, wie etwa bei der deutschen Schreibweise der Uhrzeit: Stunde:Minute:Sekunde.</li>
<li><span id="anfangNiedrig"></span> Beim <b>little-endian</b> (wörtlich etwa: „kleinendigen“) Format wird dagegen das niedrigstwertige Byte an der Anfangsadresse gespeichert, also die niedrigstwertige Komponente zuerst genannt, wie bei der herkömmlichen deutschen Datumsschreibweise: Tag.Monat.Jahr.</li></ul>
<p>Im Sprachgebrauch werden die beiden Varianten in der Computertechnik oft auch nach den Herstellern von <a href="Mikroprozessor" title="Mikroprozessor">Mikroprozessoren</a> benannt, die die jeweilige Variante in mehreren <a href="Prozessorkern#Prozessorfamilien" title="Prozessorkern">Prozessorfamilien</a> verwenden bzw. verwendet haben: „<a href="Motorola%2C_Inc." title="Motorola, Inc.">Motorola</a>-Format“ steht für big-endian, „<a href="Intel" title="Intel">Intel</a>-Format“ für little-endian.
</p><p>Werden Daten <a href="Serielle_Daten%C3%BCbertragung" title="Serielle Datenübertragung">bitweise seriell übertragen</a>, so ist zusätzlich die <a href="Bitwertigkeit" title="Bitwertigkeit">Bit-Reihenfolge</a> festzulegen. Auch hier sind unterschiedliche Varianten anzutreffen:
</p>
<ul><li>Most-Signifikant-Bit-First (MSb), wenn das höchstwertige Bit eines Bytes zuerst übertragen wird, verwendet etwa <a href="I%C2%B2C" title="I²C">I²C</a>.</li>
<li>Least-Signifikant-Bit-First (LSb), in der das niedrigstwertige Bit eines Bytes zuerst übertragen wird, ist zum Beispiel für <a href="RS-232" title="RS-232">RS-232</a><sup id="cite_ref-MIL-STD-188-100_1-0" class="reference"><a href="#cite_note-MIL-STD-188-100-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup> und Ethernet-Frames festgelegt.</li></ul>

<div class="mw-heading mw-heading2"><h2 id="Vereinbarungen">Vereinbarungen</h2></div>
<p>Folgende Aussagen, über die in der Literatur hochgradiger <a href="Konsens" title="Konsens">Konsens</a> besteht, seien als Ausgangsbasis für die Diskussion und Definition der Sachverhalte explizit gemacht:
</p>
<ul><li>Der Arbeitsspeicher kennt eine <i>kleinste adressierbare Einheit</i>, auch „Speicherstelle“ genannt. In diesem Artikel sei sie exemplarisch das <a href="Byte" title="Byte">Byte</a>. Es besteht aus 8&nbsp;<a href="Bit" title="Bit">Bits</a> und sein Inhalt wird in diesem Artikel vorwiegend mit zwei <a href="Hexadezimalsystem" title="Hexadezimalsystem">hexadezimalen</a> Ziffern angegeben, wobei jede Ziffer für 4&nbsp;Bits entsprechend einem Halbbyte (<a href="Nibble" title="Nibble">Nibble</a>) steht. Die kleinste adressierbare Einheit könnte aber auch aus einer anderen Anzahl von Bits bestehen, oder, wenn die Maschine im <a href="Dezimalsystem" title="Dezimalsystem">Dezimalsystem</a> rechnet, eine Dezimalziffer beherbergen.</li>
<li>Die (Byte-)Adressen des Arbeitsspeichers sind nicht-negative ganze Zahlen.</li>
<li>Ein (einfaches) <a href="Datenfeld" title="Datenfeld">Datenfeld</a> wird im Arbeitsspeicher in einem zusammenhängenden <a href="Speicherbereich" title="Speicherbereich">Speicherbereich</a> (einer lückenlosen Folge von Adressen) abgelegt, der eine <i>Anfangs</i>-(Byte-)<i>adresse</i> und eine (Byte-)<i>Länge</i> hat.</li>
<li>Die <a href="Maschinensprache" title="Maschinensprache">Maschinenbefehle</a> adressieren ein Datenfeld über seine Anfangsadresse.<sup id="cite_ref-2" class="reference"><a href="#cite_note-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup> Ganz analog spielt in <a href="Assemblersprache" title="Assemblersprache">Assemblersprachen</a> und in <a href="H%C3%B6here_Programmiersprache" title="Höhere Programmiersprache">höheren Programmiersprachen</a> die Anfangsadresse die Rolle eines <a href="Zeiger_(Informatik)" title="Zeiger (Informatik)">Zeigers</a> zum Datenfeld.</li>
<li>Das Byte an der Anfangsadresse wird häufig als das <i>linke</i>, das an der Endadresse als das <i>rechte</i> Byte bezeichnet (siehe <a href="Bitwertigkeit" title="Bitwertigkeit">Bit-Reihenfolge</a>). An diese Orientierung halten sich horizontale graphische Darstellungen von Datenfeldern sehr häufig, aber nicht immer.</li>
<li>Ein Byte innerhalb eines einfachen Datenfelds hat zu dessen Anfangsadresse einen (nicht-negativen) Abstand, der als <i>Offset</i> bezeichnet wird.</li>
<li>Betrachtet werden numerische Daten, die im Speicher entsprechend einem Stellenwertsystem dargestellt sind. Bei einem solchen System kommt einer Ziffer neben ihrem Wert als einzelnem Zeichen noch ein (von ihrer Position innerhalb der ganzen Zahl abhängiger) Stellenwert zu, auch „Wertigkeit“ oder „Signifikanz“ genannt.</li>
<li>Die in Handbüchern und unten vorkommenden hexadezimalen Notationen <code>3A4B5C6D<sub>h</sub></code> oder <code>0x3A4B5C6D</code> bezeichnen einen Zahlwert, und zwar die Zahl 978.017.389, und nicht ihre Darstellung im Speicher, es sei denn, man meint die Speicherung <code>3A<sub>h</sub>4B<sub>h</sub>5C<sub>h</sub>6D<sub>h</sub></code>. Will man eine andere Art der Speicherung derselben Zahl <code>0x3A4B5C6D</code> angeben, so muss man auf andere Notationen ausweichen, wie auf <code>6D<sub>h</sub>5C<sub>h</sub>4B<sub>h</sub>3A<sub>h</sub></code> oder <code>0x6D,0x5C,0x4B,0x3A</code>.</li>
<li>Generell multipliziert ein <a href="Bitweiser_Operator#Bitweise_Verschiebungen" title="Bitweiser Operator">Links-Shift</a> eine Binärzahl mit einer Zweierpotenz, verschiebt also die Bits in Richtung „Big-End“ (= Richtung <a href="Bitwertigkeit#MSb0-Bitnummerierung" title="Bitwertigkeit">most significant bit</a>), und ein Rechts-Shift dividiert durch eine solche, verschiebt die Bits in Richtung „Little-End“ (= Richtung <a href="Bitwertigkeit#LSb0-Bitnummerierung" title="Bitwertigkeit">least significant bit</a>). Die Shift-Operationen induzieren eine eindeutige konsistente »Adressierung«&nbsp;von den Bytes auf die Bits (s. dazu den Abschnitt <a href="Bitwertigkeit#Adressierung_von_Bits" title="Bitwertigkeit">Adressierung von Bits</a>).<sup id="cite_ref-3" class="reference"><a href="#cite_note-3"><span class="cite-bracket">[</span>3<span class="cite-bracket">]</span></a></sup> (Die links-rechts-Orientierung bei Shift-Instruktionen ist etwas Anderes und völlig unabhängig von derjenigen bei der Adressierung mit <i>links = niedrige</i> und <i>rechts = hohe</i> Adresse.)</li></ul>
<p>Steigt bei einer im Speicher abgelegten Zahl die Wertigkeit einer Stelle mit der wachsenden Adresse, dann ist sie im Little-Endian-Format dargestellt.
</p><p>Fällt bei einer im Speicher abgelegten Zahl die Wertigkeit einer Stelle mit der wachsenden Adresse, dann ist sie im Big-Endian-Format dargestellt.
</p><p>Wird bei einem Computersystem eines dieser beiden Formate für die Speicherung <i>numerischer</i><sup id="cite_ref-4" class="reference"><a href="#cite_note-4"><span class="cite-bracket">[</span>4<span class="cite-bracket">]</span></a></sup> Felder durchgehalten, so wird das erste als <i>Little-Endian-</i>, das zweite als <i>Big-Endian-System</i> bezeichnet.
</p>
<div class="mw-heading mw-heading2"><h2 id="Beispiel:_Speicherung_einer_32-Bit-Ganzzahl_in_4_Bytes">Beispiel: Speicherung einer 32-Bit-Ganzzahl in 4 Bytes</h2></div>

<table class="wikitable float-right" style="text-align:center;">

<tbody><tr>
<th>Byte-<br>Adresse</th>
<th>Big<br>Endian</th>
<th>Mixed<br>Endian</th>
<th>Little<br>Endian
</th></tr>
<tr>
<td>10000
</td>
<td class="hintergrundfarbe6"><code>0A</code>
</td>
<td class="hintergrundfarbe7"><code>0B</code>
</td>
<td class="hintergrundfarbe9"><code>0D</code>
</td></tr>
<tr>
<td>10001
</td>
<td class="hintergrundfarbe7"><code>0B</code>
</td>
<td class="hintergrundfarbe6"><code>0A</code>
</td>
<td class="hintergrundfarbe8"><code>0C</code>
</td></tr>
<tr>
<td>10002
</td>
<td class="hintergrundfarbe8"><code>0C</code>
</td>
<td class="hintergrundfarbe9"><code>0D</code>
</td>
<td class="hintergrundfarbe7"><code>0B</code>
</td></tr>
<tr>
<td>10003
</td>
<td class="hintergrundfarbe9"><code>0D</code>
</td>
<td class="hintergrundfarbe8"><code>0C</code>
</td>
<td class="hintergrundfarbe6"><code>0A</code>
</td></tr></tbody></table>
<p>Das Beispiel in der Grafik stellt die Ganzzahl 168.496.141 als 32-Bit-<a href="Integer_(Datentyp)" title="Integer (Datentyp)">Integer</a>-Wert dar (hexadezimal: <code>0A0B0C0D<sub>h</sub></code>), gespeichert in 4&nbsp;Bytes ab einer angenommenen <a href="Speicheradresse" title="Speicheradresse">Speicheradresse</a> von <code>10000</code>:
</p>
<ul><li><i>Big-endian</i> speichert <code>168496141 = 0A0B0C0D<sub>h</sub></code> in der Reihenfolge <code>0A<sub>h</sub>0B<sub>h</sub>0C<sub>h</sub>0D<sub>h</sub></code>.</li>
<li><i>Little-endian</i> speichert<code>168496141 = 0A0B0C0D<sub>h</sub></code> in der umgekehrten Reihenfolge der Bytes <code>0D<sub>h</sub>0C<sub>h</sub>0B<sub>h</sub>0A<sub>h</sub></code>.</li></ul>
<p>Einige ältere Systeme (z.&nbsp;B. <a href="PDP-11" title="PDP-11">PDP-11</a>) speichern die Bytes auch in der Reihenfolge <code>0B<sub>h</sub>0A<sub>h</sub>0D<sub>h</sub>0C<sub>h</sub></code> (aber <i>nicht</i> als <code>0C<sub>h</sub>0D<sub>h</sub>0A<sub>h</sub>0B<sub>h</sub></code>). Dies wird als <i>mixed-endian</i> oder auch <b>middle-endian</b> bezeichnet.
</p><p>Einige Systeme speichern sowohl big-endian als auch little-endian, was als <b>bi-endian</b> bezeichnet wird.
</p>
<div class="mw-heading mw-heading2"><h2 id="Reihenfolge_der_Ziffern_innerhalb_von_Zahlen_in_der_Sprache">Reihenfolge der Ziffern innerhalb von Zahlen in der Sprache</h2></div>
<p>Auch die gewöhnliche Darstellung von (Dezimal-)Zahlen ist –&nbsp;im Sinne der <a href="Schreibrichtung" title="Schreibrichtung">Leserichtung</a> der meisten europäischen Sprachen von links nach rechts&nbsp;– <i>big-endian</i>. Dies kommt dadurch zustande, dass die Ziffernreihenfolge der <a href="Arabische_Zahlschrift" title="Arabische Zahlschrift">indisch-arabischen Zahlen</a> bei den Schriften Mitteleuropas beibehalten wurde. Im Arabischen, das sich von rechts nach links liest, werden die Zahlen gleich geschrieben, d.&nbsp;h. für Zahlen unter&nbsp;100 werden sie als „little-endian“ gelesen (für Zahlen ab&nbsp;100 werden sie „big-endian“ gelesen). Auch im Deutschen werden die Zahlen von&nbsp;13 bis&nbsp;99 little-endian ausgesprochen: „Ein-und-Zwanzig“; die Eins als weniger wertige Stelle wird zuerst gesprochen (diese Reihenfolge gibt es auch in <a href="Zahlennamen#Zwanzig_bis_neunundneunzig" title="Zahlennamen">anderen Sprachen</a>).
</p><p>Ein Beispiel für Dezimalzahlen: In der gebräuchlichsten Darstellung <i>(big-endian)</i> wird die Dezimalzahl Eintausend-zweihundert-dreißig dargestellt als&nbsp;„1230“, wobei die&nbsp;„1“ die Wertigkeit&nbsp;1000 hat, die&nbsp;„2“ die Wertigkeit&nbsp;100 und die&nbsp;„3“ die Wertigkeit&nbsp;10. In der „Little-Endian“-Darstellung ist es umgekehrt, so dass die Darstellung der Zahl „0321“ wäre (ausgesprochen vielleicht „Dreißig-Zweihundert-Eintausend“).
</p>
<div class="mw-heading mw-heading2"><h2 id="Kontexte_des_Byte-Reihenfolge-Problems">Kontexte des Byte-Reihenfolge-Problems</h2></div>
<p>Das Problem der Byte-Reihenfolge betrifft solche <a href="Datentyp" title="Datentyp">Datentypen</a>, die aus mehreren Byte zusammengesetzt sind und vom jeweiligen <a href="Prozessor" title="Prozessor">Prozessor</a> direkt unterstützt werden, also hauptsächlich Ganzzahl- und <a href="Gleitkommazahl" title="Gleitkommazahl">Gleitkommatypen</a>, sowie Datentypen, die vom Prozessor effektiv als solche interne Datentypen behandelt werden, z.&nbsp;B. <a href="UTF-16" title="UTF-16">UTF-16</a>.
</p><p>Um dieses Problem bei <a href="Unicode" title="Unicode">Unicode</a>-Zeichen zu umgehen, wird oft eine <a href="Byte_Order_Mark" title="Byte Order Mark">Bytereihenfolge-Markierung</a>&nbsp;(BOM) benutzt.
Die Zeichenfolge "Die" (drei Zeichen, 6 Byte) mit BOM (ein Zeichen, 2 Byte) als UTF-16-Kodierung, in der Byte-Darstellung von <a href="Hex-Editor" title="Hex-Editor">Hex-Editoren</a> (8 Byte) stellt sich für die beiden unterschiedliche Byte-Reihenfolgen etwa so dar:
</p><p><i>Big Endian:</i>
</p>
<pre>FE FF 00 44 00 69 00 65 | þÿ␣D␣i␣e
</pre>
<p><i>Little Endian:</i>
</p>
<pre>FF FE 44 00 69 00 65 00 | ÿþD␣i␣e␣
</pre>
<div class="mw-heading mw-heading2"><h2 id="Plattformübergreifende_Darstellung_von_Zahlen"><span id="Plattform.C3.BCbergreifende_Darstellung_von_Zahlen"></span>Plattformübergreifende Darstellung von Zahlen</h2></div>
<p>Um einen fehlerfreien Datenaustausch zwischen Computern verschiedener Plattformen zu ermöglichen, ist bei <a href="Netzwerkprotokoll" title="Netzwerkprotokoll">Netzwerkprotokollen</a> immer die Byte-Reihenfolge festgeschrieben. Diese wird als „Network Byte Order“ bezeichnet. Die natürliche Byte-Reihenfolge des Systems wird demgegenüber als „Host Byte Order“ bezeichnet. Arbeitet das System nicht mit dieser Byte-Reihenfolge, so muss diese im Netzwerktreiber beziehungsweise zum Teil im Anwendungsprogramm entsprechend umgewandelt werden.
</p><p>Im Falle des heute vornehmlich verbreiteten <a href="Internet_Protocol" title="Internet Protocol">Internetprotokoll</a>-Satzes entspricht die <i>Network Byte Order</i> dem <i>Big-Endian</i>-Format. Es existieren jedoch noch immer Protokolle, die eine andere Byte-Reihenfolge verwenden. Darüber hinaus gibt es Datentypen, die nicht oder nicht nur durch die Endianness charakterisiert sind, wie z.&nbsp;B. Gleitkommazahlen, bei deren Umwandlung auch Genauigkeitsverluste möglich sind.
</p><p>In der auf den meisten <a href="Betriebssystem" title="Betriebssystem">Betriebssystemen</a> angebotenen <a href="Socket#BSD_Sockets_API" title="Socket">BSD-IP-Socket-API</a> existieren zur Umwandlung der Byte-Reihenfolge sechs Funktionen:
</p>
<table class="wikitable">

<tbody><tr class="hintergrundfarbe6">
<th rowspan="2">Datentyp (Wortbreite)</th>
<th colspan="2">Umwandlung
</th></tr>
<tr>
<th>Host-to-network</th>
<th>Network-to-host
</th></tr>
<tr>
<td>double (64 bit)</td>
<td><code>htond()</code></td>
<td><code>ntohd()</code>
</td></tr>
<tr>
<td>long (32 bit)</td>
<td><code>htonl()</code></td>
<td><code>ntohl()</code>
</td></tr>
<tr>
<td>short (16 bit)</td>
<td><code>htons()</code></td>
<td><code>ntohs()</code>
</td></tr></tbody></table>
<p>Die korrekte Umwandlung ist garantiert für <a href="Vorzeichen_(Zahl)" title="Vorzeichen (Zahl)">vorzeichen</a>lose Ganzzahlen. Negative Ganzzahlen werden korrekt umgewandelt, wenn sie im <a href="Zweierkomplement" title="Zweierkomplement">Zweierkomplement</a> dargestellt sind und die <a href="Datenwort" title="Datenwort">Bitbreite</a> übereinstimmt.
</p><p>Auf Big-Endian-Maschinen sind diese Funktionen trivial, da Host- und Network-Byteorder identisch sind.
</p><p>Für Programmierer von Netzwerkanwendungen empfiehlt sich die Verwendung dieser Funktionen, da sich der <a href="Quelltext" title="Quelltext">Quellcode</a> dadurch auch auf andere Systeme übertragen lässt.
</p><p>Die Auswahl der zur laufenden Hardware passenden <a href="Implementierung" title="Implementierung">Implementierung</a> geschieht normalerweise implizit durch das Betriebssystem – im Notfall auch durch den Benutzer beim <a href="Download" title="Download">Download</a>.
</p><p>Der Endianness-Typ einer Maschine lässt sich programmtechnisch wie folgt feststellen:
</p>
<div class="mw-highlight mw-highlight-lang-c mw-content-ltr" dir="ltr"><pre><span></span><span class="w"> </span><span class="k">union</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kt">uint16_t</span><span class="w"> </span><span class="n">sixteenBits</span><span class="p">;</span>
<span class="w"> </span><span class="kt">uint8_t</span><span class="w"> </span><span class="n">twoBytes</span><span class="p">[</span><span class="mi">2</span><span class="p">];</span>
<span class="w"> </span><span class="p">}</span><span class="w"> </span><span class="n">test_endianness</span><span class="p">;</span>

<span class="w"> </span><span class="n">test_endianness</span><span class="p">.</span><span class="n">sixteenBits</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="mi">15</span><span class="p">;</span><span class="w"> </span><span class="c1">// 0x8000, 32768</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">test_endianness</span><span class="p">.</span><span class="n">twoBytes</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="c1">// Das Programm läuft auf einer Big-Endian-Maschine.</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="c1">// Das Programm läuft auf einer Little-Endian-Maschine.</span>
<span class="w"> </span><span class="p">}</span>
</pre></div>
<p>In der <code>BitConverter</code>-Klasse des <code>.NET Framework</code> gibt es das Feld <code>IsLittleEndian</code>,<sup id="cite_ref-5" class="reference"><a href="#cite_note-5"><span class="cite-bracket">[</span>5<span class="cite-bracket">]</span></a></sup> das den Endianness-Typ (der laufenden Hardware) abzufragen gestattet.<sup id="cite_ref-6" class="reference"><a href="#cite_note-6"><span class="cite-bracket">[</span>6<span class="cite-bracket">]</span></a></sup>
</p><p>Byte-Order-Probleme können auch beim Austausch von Dateien sowie zum Teil beim Austausch von Datenträgern zwischen verschiedenen Plattformen auftreten. Hier muss entweder durch eindeutige Definition des entsprechenden Dateiformats beziehungsweise Dateisystems oder durch einen Kompatibilitätsmodus, der während des Ladens eine Erkennung und eventuelle Umwandlung durchführt, Abhilfe geschaffen werden.
</p><p>Die Problematik der Darstellung von Daten auf unterschiedlichen Systemen und ihres Austauschs wird ganz allgemein adressiert von der <a href="OSI-Modell#Schicht_6_–_Darstellungsschicht_(Presentation_Layer)" title="OSI-Modell">Darstellungsschicht</a> des OSI-Modells.
</p><p><span id=".E2.80.9ENuxi.E2.80.9C"></span><span id="„Nuxi“"></span><b>„Nuxi“</b>
</p><p>Scherzhaft wird das Problem verschiedener <i>Endianness</i> unterschiedlicher Architekturen auch oft als NUXI-Problem bezeichnet: Wenn das Wort UNIX in zwei Zwei-Byte-Words (zwei 16-Bit-Register für „UN“ und „IX“) gespeichert wird, liegt es in einem Big-Endian-System als „UNIX“ im Speicher, in einem Little-Endian-System dagegen wegen der Vertauschung der Bytes in jedem Wort als „NUXI“ (auf 32-Bit-Systemen stünde dagegen „XINU“ in einem einzelnen 32-Bit-Register).
</p>
<div class="mw-heading mw-heading2"><h2 id="Wichtige_Eigenschaften">Wichtige Eigenschaften</h2></div>
<p>Bei den ersten Mikroprozessoren waren dies nur 4&nbsp;Bit (später dann lange Zeit 8&nbsp;Bit). Der Adressbus ist aber bei diesen CPUs wesentlich breiter. Damit ergab sich die Notwendigkeit, Daten mit einem Befehl zu laden oder zu speichern, welche auf mindestens zwei gekoppelte Register verteilt waren. Um die Komplexität der CPU zu verringern (jede einzelne Transistorfunktion war noch teuer) war es einfacher, bei jeder Operation automatisch das niederwertige „Datenhäppchen“ zu laden, während dieser Speicheroperation konnte dann der Befehl weiter dekodiert und gegebenenfalls die weiteren Daten im nächsten Zyklus bearbeitet werden. Bei Großrechnern („main frames“) bestand dieses Problem weniger, da sie damals schon mit Datenbus-Breiten von 16 bis 48 Bit arbeiteten, diese also in einem einzigen Speicherzyklus laden konnten und somit die (Byte)-Reihenfolge keine Rolle spielte.
</p>
<div class="mw-heading mw-heading3"><h3 id="Big-Endian-Format">Big-Endian-Format</h3></div>
<ol><li>Da die Maschineninstruktionen die Operanden bei ihrer kleinsten Adresse ansprechen, muss bei Operationen, deren Algorithmus an der niedrigstwertigen Stelle beginnt, auf diese durch eine Erhöhung der Anfangsadresse um die Operandenlänge–1 positioniert werden. Somit ist <a href="Addition" title="Addition">Addieren</a>, <a href="Subtraktion" title="Subtraktion">Subtrahieren</a> und <a href="Multiplikation" title="Multiplikation">Multiplizieren</a> geringfügig aufwändiger.</li>
<li><a href="Division_(Mathematik)" title="Division (Mathematik)">Dividieren</a> und <a href="Maschinensprache#Kategorisierung_der_Befehle" title="Maschinensprache">Vergleichen</a> beginnen dagegen beim höchstwertigen Byte, sind deshalb marginal einfacher.</li>
<li>Dieselben <a href="Maschinensprache#Kategorisierung_der_Befehle" title="Maschinensprache">Vergleichsoperationen</a> können zum Vergleichen von (<a href="Vorzeichen_(Zahl)" title="Vorzeichen (Zahl)">vorzeichenlosen</a>) Big-Endian-Zahlen wie von kurzen Texten (2, 4 oder 8 Byte lang) genommen werden, da beide lexikographisch sortiert werden.</li>
<li>Zum Vergleichen von <a href="Zeichenkette" title="Zeichenkette">Zeichenketten</a> gibt es beim <a href="Maschinensprache#Maschinencode_bei_IBM-Rechnern_am_Beispiel_von_OS/390" title="Maschinensprache">Großrechnersystem IBM/370</a> den Maschinenbefehl <code>CLCL</code> (<i>C</i>ompare <i>L</i>ogical <i>C</i>haracter <i>L</i>ong) mit zwei (verschieden und beliebig) langen Speicheroperanden, der die <a href="Lexikographische_Ordnung" title="Lexikographische Ordnung">lexikographische Ordnung</a> implementiert.<sup id="cite_ref-7" class="reference"><a href="#cite_note-7"><span class="cite-bracket">[</span>7<span class="cite-bracket">]</span></a></sup></li>
<li>Im Big-Endian-Format sind <a href="Dump#Hexdump" title="Dump">Hexdumps</a> von Zahlen leichter lesbar, da die Reihenfolge der Ziffern die gleiche ist wie in der üblichen Schreibweise des <a href="Stellenwertsystem" title="Stellenwertsystem">Stellenwertsystems</a>.</li></ol>
<div class="mw-heading mw-heading3"><h3 id="Little-Endian-Format">Little-Endian-Format</h3></div>
<ol><li>Da die Maschineninstruktionen die Operanden bei ihrer kleinsten Adresse ansprechen, entfällt bei Operationen, deren Algorithmus an der niedrigstwertigen Stelle beginnt, so bei <a href="Addition" title="Addition">Addition</a>, <a href="Subtraktion" title="Subtraktion">Subtraktion</a> und <a href="Multiplikation" title="Multiplikation">Multiplikation</a>, das initiale Inkrementieren mit der Operandenlänge. Diese Operationen sind somit geringfügig einfacher in der Hardware zu implementieren.</li>
<li>Um auf einer Little-Endian-Maschine eine Zwei-Byte-Zahl in eine Vier-Byte-Zahl zu verwandeln, müssen lediglich zwei mit Null gefüllte Bytes am Ende angefügt werden, ohne dass sich die Speicheradresse ändert. Auf einer Big-Endian-Maschine muss der Wert zuvor im Speicher um zwei Bytes verschoben werden. Auch die umgekehrte Umwandlung gestaltet sich einfacher. Auf einer Little-Endian-Maschine werden einfach die höherwertigen Byte verworfen, ohne dass sich die Speicheradresse ändert.</li>
<li>Dagegen ist die Implementierung von Operationen wie der <a href="Division_(Mathematik)" title="Division (Mathematik)">Division</a>, deren Algorithmus an der höchstwertigen Stelle beginnt, marginal aufwändiger.</li>
<li>Maschinenbefehle für das lexikographische Vergleichen von langen Texten fehlen bei manchen Maschinen und müssen durch Unterprogramme, wie <code>memcmp()</code><sup id="cite_ref-8" class="reference"><a href="#cite_note-8"><span class="cite-bracket">[</span>8<span class="cite-bracket">]</span></a></sup>, ersetzt werden.</li></ol>
<p>Beispiel für eine dezimale Little-Endian-Addition:
</p>
<pre> 717
+ 0452
----
7523
====
</pre>
<p>(Probe: <code>717+2540=3257</code>)
</p>
<div class="mw-heading mw-heading2"><h2 id="Beispiel:_Interpretation_eines_Hexdumps">Beispiel: Interpretation eines Hexdumps</h2></div>
<p>Der Zweck eines <a href="Dump" title="Dump">Dumps</a> ist die eindeutige Darstellung des Speicherinhalts bspw. zur Fehleranalyse. Bei Maschinen, deren Speicherstelle (Byte) aus 8 Bits besteht, wird hierfür die Darstellung im <a href="Hexadezimalsystem" title="Hexadezimalsystem">Hexadezimalsystem</a> gewählt, bei dem die <span style="white-space:nowrap">2<sup>8</sup> = 256 = 16<sup>2</sup></span> verschiedenen Inhalte eines Bytes in 2 Hexadezimalziffern ausgedrückt werden. Dieser <a href="Code" title="Code">Codierung</a>, die sowohl Binärwerte wie Maschineninstruktionen wie Dezimalwerte im <a href="BCD-Code" title="BCD-Code">BCD-Code</a> unmittelbar abdeckt, wird üblicherweise eine Spalte beigegeben, die jedes einzelne Byte sofern möglich als alphabetisches Zeichen darstellt, so dass eventuell im Speicher vorhandene Texte leichter erkannt und lesbar werden.
</p><p>Das folgende Beispiel zeigt, wie zwei aufeinander folgende Bytes (4 Halbbytes) in einem Hexdump mit dem lesbaren hexadezimalen Inhalt <code>a732</code> zu interpretieren sind.
</p>
<table class="wikitable">

<tbody><tr style="text-align:center">
<td></td>
<td colspan="3"><small>Hexdump</small></td>
<td colspan="6"><small>2 vorzeichenlose 8-Bit-Binärzahlen</small></td>
<td colspan="3"><small>1 vorzeichenlose 16-Bit-Binärzahl</small>
</td></tr>
<tr style="text-align:center">
<td></td>
<td colspan="2"><small>Bytes</small></td>
<td><small>Text</small></td>
<td><small>Byte0: Bits</small></td>
<td><small>hex</small></td>
<td><small>dez</small></td>
<td><small>Byte1: Bits</small></td>
<td><small>hex</small></td>
<td><small>dez</small></td>
<td><small>Bits</small></td>
<td><small>hex</small></td>
<td><small>dez</small>
</td></tr>
<tr>
<td><small><a href="Bitwertigkeit#Adressierung_von_Bits" title="Bitwertigkeit">Offset</a></small></td>
<td><code>0</code></td>
<td><code>1</code>
</td>
<td>
</td>
<td><code>0123&nbsp;4567</code></td>
<td colspan="2"></td>
<td><code>0123&nbsp;4567</code></td>
<td colspan="2"></td>
<td><code>0123&nbsp;4567&nbsp;89ab&nbsp;cdef</code>
</td>
<td colspan="2">
</td></tr>
<tr style="background:#EEAAAA; color:#202122;">
<td><small>lesbar</small>
</td>
<td><code>a7</code></td>
<td><code>32</code>
</td>
<td><code>§2</code>
</td>
<td colspan="9">
</td></tr>
<tr>
<th colspan="4"></th>
<th colspan="9">big-endian
</th></tr>
<tr style="background:#AAEEEE; color:#202122;">
<td colspan="4"><small><a href="#interne_Bitfolge">interne&nbsp;Bitfolge</a></small></td>
<td><code>1010&nbsp;0111</code></td>
<td colspan="2"></td>
<td><code>0011&nbsp;0010</code></td>
<td colspan="2">
</td>
<td><code><span style="border-top:1px solid; padding:0 0.0em;">1010&nbsp;0111</span>&nbsp;0011&nbsp;0010</code>
</td>
<td colspan="2">
</td></tr>
<tr style="background:#33DDDD; color:#202122;">
<td colspan="4"><small>Interpretation</small>
</td>
<td><code>1010&nbsp;0111<sub>2</sub></code></td>
<td><code>a7<sub>h</sub></code></td>
<td style="text-align:right"><code>167<sub>10</sub></code>
</td>
<td><code>0011&nbsp;0010<sub>2</sub></code></td>
<td><code>32<sub>h</sub></code></td>
<td style="text-align:right"><code>50<sub>10</sub></code>
</td>
<td><code><span style="border-top:1px solid; padding:0 0.0em;">1010&nbsp;0111</span>&nbsp;0011&nbsp;0010<sub>2</sub></code>
</td>
<td><code><span style="border-top:1px solid; padding:0 0.0em;">a7</span>32<sub>h</sub></code>
</td>
<td><code>42802<sub>10</sub></code>
</td></tr>
<tr>
<th colspan="4"></th>
<th colspan="9">little-endian
</th></tr>
<tr style="background:#AAEEEE; color:#202122;">
<td colspan="4"><small><a href="#interne_Bitfolge">interne&nbsp;Bitfolge</a></small></td>
<td><code>1110&nbsp;0101</code></td>
<td colspan="2"></td>
<td><code>0100&nbsp;1100</code></td>
<td colspan="2">
</td>
<td><code><span style="border-top:1px solid; padding:0 0.0em;">1110&nbsp;0101</span>&nbsp;0100&nbsp;1100</code>
</td>
<td colspan="2">
</td></tr>
<tr style="background:#33DDDD; color:#202122;">
<td colspan="4"><small>Interpretation</small>
</td>
<td><code>1010&nbsp;0111<sub>2</sub></code></td>
<td><code>a7<sub>h</sub></code></td>
<td style="text-align:right"><code>167<sub>10</sub></code>
</td>
<td><code>0011&nbsp;0010<sub>2</sub></code></td>
<td><code>32<sub>h</sub></code></td>
<td style="text-align:right"><code>50<sub>10</sub></code>
</td>
<td><code>0011&nbsp;0010&nbsp;<span style="border-top:1px solid; padding:0 0.0em;">1010&nbsp;0111</span><sub>2</sub></code>
</td>
<td><code>32<span style="border-top:1px solid; padding:0 0.0em;">a7</span><sub>h</sub></code>
</td>
<td><code>12967<sub>10</sub></code>
</td></tr></tbody></table>
<p>Besteht das Feld nur aus einem einzelnen Byte (8-Bit-Binärzahl mit oder <a href="Logische_Verschiebung" title="Logische Verschiebung">ohne Vorzeichen</a>) oder einer Ansammlung davon (bspw. Text im Code <a href="ISO_8859" title="ISO 8859">ISO 8859</a>) –&nbsp;in der Tabelle die Spalten „2 vorzeichenlose 8-Bit Binärzahlen“&nbsp;–, dann unterscheidet sich die Interpretation bei den beiden Formaten big- oder little-endian nicht. <span id="interne_Bitfolge"></span>Zwar ist zwischen den beiden Formaten die <i>interne Reihenfolge der Bits</i> pro Byte genauso gespiegelt wie die der Bytes pro Integer (s. <a href="Bitwertigkeit#Adressierung_von_Bits" title="Bitwertigkeit">Bitwertigkeit#Adressierung von Bits</a>). Durch die Maßgaben der Hexadezimaldarstellung ist der Hexdump aber Byte für Byte vollkommen festgelegt, so dass sich big- oder little-endian nicht unterscheiden.
</p><p>Besteht das Feld aus mehr als einem Byte, kommt bei little-endian die sogenannte „Intel-Konvention“<sup id="cite_ref-Kueveler-Schwoch_2007_9-0" class="reference"><a href="#cite_note-Kueveler-Schwoch_2007-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup> zum Zuge. Diese besagt, dass –&nbsp;anders als bei big-endian&nbsp;– das niederwertige Byte auf der niederen Speicheradresse abgelegt wird und die höherwertigen Bytes auf den nachfolgenden Speicheradressen. Im Ergebnis sind bspw. bei ganzzahligen Feldern der Länge 16, 32 oder 64 Bits die beiden Hexdump-Darstellungen byteweise Spiegelungen voneinander. Zur Verdeutlichung ist in der Tabelle bei den Spalten „1&nbsp;vorzeichenlose 16-Bit Binärzahl“ der Inhalt des ersten der 2&nbsp;Bytes mit einem Überstrich versehen.
</p>
<div class="mw-heading mw-heading2"><h2 id="Verwendung_und_Hardware-Beispiele">Verwendung und Hardware-Beispiele</h2></div>
<div class="mw-heading mw-heading3"><h3 id="Big-endian">Big-endian</h3></div>
<p>Das Format <i>big-endian</i> wurde z.&nbsp;B. eingesetzt bei der <a href="Motorola_6800" title="Motorola 6800">Motorola-6800</a>- sowie der <a href="Motorola_68000" title="Motorola 68000">Motorola-68000</a>- bzw. -<a href="Freescale_ColdFire" title="Freescale ColdFire">Coldfire</a>-Familie, den Prozessoren der <a href="IBM_Z" title="IBM Z">System-z</a>- und <a href="SPARC-Architektur" title="SPARC-Architektur">Sun-SPARC</a>-CPUs und dem <a href="Power-Architektur" title="Power-Architektur">Power</a> (bis Power7) und <a href="PowerPC" title="PowerPC">PowerPC</a>.
</p><p><i>Big-endian</i> wird verwendet von <a href="Gro%C3%9Frechner" title="Großrechner">Mainframe</a>-Systemen (z.&nbsp;B. <a href="IBM" title="IBM">IBM</a>-Mainframe) sowie <a href="MIPS-Architektur" title="MIPS-Architektur">MIPS</a>-, <a href="SPARC-Architektur" title="SPARC-Architektur">SPARC</a>-, <a href="Power-Architektur" title="Power-Architektur">Power</a>-, <a href="PowerPC" title="PowerPC">PowerPC</a>-, <a href="Motorola_6800" title="Motorola 6800">Motorola 6800</a>/<a href="Motorola_68000" title="Motorola 68000">68k</a>-, <a href="Atmel_AVR32" title="Atmel AVR32">Atmel-AVR32</a>-<sup id="cite_ref-10" class="reference"><a href="#cite_note-10"><span class="cite-bracket">[</span>10<span class="cite-bracket">]</span></a></sup> und <a href="Texas_Instruments_TMS9900" title="Texas Instruments TMS9900">TMS9900</a>-<a href="Prozessor" title="Prozessor">Prozessoren</a>. Auch Alpha-Prozessoren lassen sich in diesem Modus betreiben, dies ist jedoch unüblich. Mit dem IBM POWER8 wurde die Power-Architektur (<a href="Power_Architecture_Platform_Reference" title="Power Architecture Platform Reference">PAPR</a>) auf little-endian umgestellt, jedoch kann der POWER8 ebenfalls noch im Big-Endian-Modus betrieben werden.<sup id="cite_ref-11" class="reference"><a href="#cite_note-11"><span class="cite-bracket">[</span>11<span class="cite-bracket">]</span></a></sup>
</p><p>PowerPC kann bei einigen Modellen auch auf <i>little-endian</i> umgeschaltet werden sowie POWER8 vom <i>Little-</i> in den <i>Big-Endian</i>-Modus umgestellt werden&nbsp;– IBM forciert jedoch seit dem POWER8 den Little-Endian-Modus.
</p>
<div class="mw-heading mw-heading3"><h3 id="Little-endian">Little-endian</h3></div>
<p>Das <i>Little-Endian</i>-Format wurde ursprünglich beim Prozessor <a href="MOS_Technology_6502" title="MOS Technology 6502">6502</a>, der <a href="NEC_Corporation" title="NEC Corporation">NEC</a>-V800-Reihe, <a href="PICmicro" title="PICmicro">PICmicro</a> oder den Intel-<a href="X86-Prozessor" title="X86-Prozessor">x86-Prozessoren</a> verwendet.
</p><p>Auch heutige <a href="Personal_Computer" title="Personal Computer">PC</a>-Systeme (<a href="X86-Architektur" title="X86-Architektur">x86</a>-kompatible) verwenden <i>little-endian</i>. Weitere sind <a href="Alpha-Prozessor" title="Alpha-Prozessor">Alpha</a>, <a href="Altera_Nios" title="Altera Nios">Altera Nios</a>, <a href="Microchip_AVR" title="Microchip AVR">Atmel AVR</a>, <a href="Power-Architektur" title="Power-Architektur">IBM Power</a> ab <a href="Power-Architektur#POWER8" title="Power-Architektur">POWER8</a>, <a href="RISC-V" title="RISC-V">RISC-V</a>, manche <a href="SuperH" title="SuperH">SH3/SH4</a>-Systeme oder <a href="Virtual_Address_eXtension" title="Virtual Address eXtension">VAX</a>. Dies sind <i>True-Little-Endian</i>-Systeme. Auch die <a href="ARM-Architektur" title="ARM-Architektur">ARM-Architektur</a> verwendet standardmäßig Little-Endian. Arm-CPUs werden in Mikrokontrollern (beispielsweise <a href="RP2040" title="RP2040">RP2040</a>), Single-Board-Computern (<a href="Raspberry_Pi" title="Raspberry Pi">Raspberry Pi</a>) und den allermeisten Mobiltelefonen eingesetzt. Die Smartphone-Betriebssysteme <a href="Android_(Betriebssystem)" title="Android (Betriebssystem)">Android</a> und <a href="IOS_(Betriebssystem)" title="IOS (Betriebssystem)">IOS</a><sup id="cite_ref-12" class="reference"><a href="#cite_note-12"><span class="cite-bracket">[</span>12<span class="cite-bracket">]</span></a></sup> verwenden die Arm-Architektur und verwalten den Speicher im Little-Endian-Modus.
</p><p>Im Gegensatz dazu stehen Architekturen, wie manche PowerPC-Varianten (u.&nbsp;a. 603, 740, 750), die nur als Little-Endian-Systeme konfiguriert werden können (s.&nbsp;u. bi-endian) und aus der Sicht des laufenden Programms dann little-endian verwenden, Werte im Speicher jedoch weiterhin im big-endian-Format ablegen. Bei Lade- und Speicheroperationen wird die Darstellung implizit umgewandelt. Bei der Softwareerstellung für diese Systeme muss dies gegebenenfalls berücksichtigt werden, z.&nbsp;B. bei der <a href="Ger%C3%A4tetreiber" title="Gerätetreiber">Treiber</a>-Programmierung.
</p>
<div class="mw-heading mw-heading3"><h3 id="Mischvarianten_(bi-endian)"><span id="Mischvarianten_.28bi-endian.29"></span>Mischvarianten (bi-endian)</h3></div>
<p>Einige Prozessoren, z.&nbsp;B. bestimmte MIPS-Varianten und POWER/PowerPC (<a href="Power_Architecture_Platform_Reference" title="Power Architecture Platform Reference">PAPR</a>) sowie alle Alpha-Prozessoren, lassen sich zwischen <i>little-endian</i> und <i>big-endian</i> umschalten.
</p><p>Auch <a href="ARM-Architektur" title="ARM-Architektur">ARM</a>-Prozessoren (inkl. des Intel <a href="XScale" title="XScale">XScales</a>) können bei Datenzugriffen sowohl in <i>little</i>- als auch in <i>big-endian</i> betrieben werden; auf Code wird bei ARM-Prozessoren allerdings immer im Little-Endian-Format zugegriffen.
</p><p>Die von <a href="HP_Inc." title="HP Inc.">Hewlett-Packard</a> und <a href="Intel" title="Intel">Intel</a> gemeinsam entwickelte <a href="Itanium-Architektur" title="Itanium-Architektur">Itanium-Architektur</a> „IA-64“ beherrscht ebenfalls beide Byte-Reihenfolgen, was zur Erleichterung der <a href="Portierung_(Software)" title="Portierung (Software)">Portierung</a> von <a href="Betriebssystem" title="Betriebssystem">Betriebssystemen</a> hatte dienen sollen (insbesondere zwischen <a href="HP-UX" title="HP-UX">HP-UX</a> <i>(big-endian)</i> und <a href="Microsoft_Windows" title="Microsoft Windows">Windows</a> <i>(little-endian)</i>).
</p>
<div class="mw-heading mw-heading3"><h3 id="Dateiformate">Dateiformate</h3></div>
<p>Die typische Verwendung einer Byte-Reihenfolge in einer Prozessorarchitektur zur Ablage von Werten im <a href="Arbeitsspeicher" title="Arbeitsspeicher">Arbeitsspeicher</a> hat Einfluss auf die Byte-Reihenfolge von Werten im <a href="Sekund%C3%A4rspeicher" title="Sekundärspeicher">Sekundärspeicher</a> (oft Festplatten). Bei der Neuerstellung von <a href="Dateiformat" title="Dateiformat">Dateiformaten</a> wurde die Byte-Reihenfolge der Zahlenwerte so gelegt, dass sie beim Speichern und Zurückladen vom Sekundärspeicher ohne Wandlung auskommen. Mittels <a href="Speichervirtualisierung" title="Speichervirtualisierung">Speichervirtualisierung</a> können Daten auf dem Sekundärspeicher sogar direkt vom Programm angesprochen werden.
</p><p>Bedeutsam ist dies für <a href="Containerformat" title="Containerformat">Containerformate</a> mit einer allgemeinen Strukturdefinition. So wurde das <a href="Interchange_File_Format" title="Interchange File Format">Interchange File Format</a>&nbsp;(IFF) für <a href="Amiga" title="Amiga">Amiga</a>-Programme entworfen, und entsprechend diesem <a href="Motorola_68000" title="Motorola 68000">Motorola-68000</a>-Prozessor wurden die Vier-Byte-<a href="Datenblock" title="Datenblock">Chunk</a>-Längen im Motorola-Format big-endian abgelegt. Auf dem ebenfalls mit Motorola-Prozessoren arbeitenden <a href="Macintosh" title="Macintosh">Macintosh</a>-Rechnern wurde dieses u.&nbsp;a. für das Audioformat&nbsp;<a href="Audio_Interchange_File_Format" title="Audio Interchange File Format">AIFF</a> übernommen.
</p><p>Bei der Übernahme auf die Windows-Plattform mit Intel-Prozessoren wurden die Chunk-Längen umdefiniert auf das Vier-Byte Intel-Format little-endian und das neue allgemeine Containerformat als <a href="Resource_Interchange_File_Format" title="Resource Interchange File Format">Resource Interchange File Format</a>&nbsp;(RIFF) bezeichnet. Dieses RIFF-Dateiformat ist die Grundlage verbreiteter Dateiformate wie&nbsp;<a href="RIFF_WAVE" title="RIFF WAVE">RIFF WAVE</a> (*.wav-Dateien) für Audio und <a href="Audio_Video_Interleave" title="Audio Video Interleave">Audio Video Interleave</a> (*.avi-Dateien) für Video.
</p><p>Auch bei Dateiformaten ist es möglich, eine Definition zu entwickeln, die beide Byte-Reihenfolgen der Prozessorarchitekturen zulässt. So steht z.&nbsp;B. bei TIFF-Dateien (<a href="Tagged_Image_File_Format" title="Tagged Image File Format">Tagged Image File Format</a>) in den ersten zwei Bytes der Datei:
</p>
<ul><li><code>II</code> für Intel-Format (little-endian) oder</li>
<li><code>MM</code> für Motorola-Format (big-endian).</li></ul>
<p>Nachfolgende Längen- und Offset-Werte in der Datei werden dann entsprechend kodiert.
</p>
<div class="mw-heading mw-heading2"><h2 id="Etymologie">Etymologie</h2></div>
<p>Die Bezeichnungen gehen auf den <a href="Satire" title="Satire">satirischen</a> Roman <a href="Gullivers_Reisen" title="Gullivers Reisen">Gullivers Reisen</a> von <a href="Jonathan_Swift" title="Jonathan Swift">Jonathan Swift</a> zurück, in dem die Bewohner des Landes <a href="Liliput_(fiktive_Insel)" title="Liliput (fiktive Insel)">Liliput</a> in zwei verfeindeten Gruppen leben: Die einen schlagen ihre Frühstücks-Eier am dicken, „großen“, englisch „big“, Ende auf und werden deshalb als <i>Big Ender</i> bezeichnet, während die <i>Little Ender</i> die Eier am spitzen, „kleinen“, englisch „little“ Ende öffnen. Swift spielte damit auf die Abspaltung der englischen Kirche (Spitz-Ender) von der katholischen Kirche (Dick-Ender) an – in Zusammenhang mit der Byte-Reihenfolge wurde dies erstmals 1980 von <a href="Danny_Cohen_(Ingenieur)" title="Danny Cohen (Ingenieur)">Danny Cohen</a> in dem <a href="Aprilscherz" title="Aprilscherz">Aprilscherz</a>-<a href="Wissenschaftliche_Publikation" title="Wissenschaftliche Publikation">Paper</a> <i>On Holy Wars and a Plea for Peace</i> gebracht.<sup id="cite_ref-13" class="reference"><a href="#cite_note-13"><span class="cite-bracket">[</span>13<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading2"><h2 id="Weblinks">Weblinks</h2></div>
<ul><li><span id="Cohen"></span> <a href="Danny_Cohen_(Ingenieur)" title="Danny Cohen (Ingenieur)">Danny Cohen</a>: <a rel="nofollow" class="external text" href="https://www.ietf.org/rfc/ien/ien137.txt"><i>On Holy Wars and a Plea for Peace</i>.</a> <a href="Internet_Engineering_Task_Force" title="Internet Engineering Task Force">IETF</a>, IEN (Internet Experiment Note) 137, 1. April 1980 (englisch).</li>
<li>White Paper: <a rel="nofollow" class="external text" href="http://3bc.bertrand-blanc.com/endianness05.pdf"><i>Endianness or Where is Byte 0?</i></a> (PDF; 155&nbsp;kB) 3bc.bertrand-blanc.com (englisch).</li></ul>
<div class="mw-heading mw-heading2"><h2 id="Einzelnachweise_und_Anmerkungen">Einzelnachweise und Anmerkungen</h2></div>
<ol class="references">
<li id="cite_note-MIL-STD-188-100-1"><span class="mw-cite-backlink"><a href="#cite_ref-MIL-STD-188-100_1-0">↑</a></span> <span class="reference-text"><a rel="nofollow" class="external text" href="https://www.google.de/books/edition/Military_Standard/um2cRERx4S4C?gbpv=1&amp;pg=RA3-PA8">MIL-STD-188-100, S. B-8, Abb. 3, 1972.</a> oder Datei:MIL-STD-188-100 char struct for async comms 1972-11-15.svg</span>
</li>
<li id="cite_note-2"><span class="mw-cite-backlink"><a href="#cite_ref-2">↑</a></span> <span class="reference-text">Dies gilt vor allem für Maschinen, bei denen die Länge der Operanden <i>im Maschinenbefehl</i> codiert ist.<br> Nicht in dieses Schema passen Maschinen wie die <a href="IBM_1401" title="IBM 1401">IBM 1401</a>, bei der sogenannte „Wortmarken“ <i>im Speicher</i> die Ausdehnung der Speicheroperanden bestimmen. Solche Maschinen können –&nbsp;je nach Maschinenbefehl&nbsp;– ein aus (mehreren zusammenhängenden Speicherstellen bestehendes) Feld an seiner niedrigen oder seiner hohen Adresse ansprechen und zum anderen Ende hin abarbeiten; so adressiert beispielsweise der Addieren-Befehl der IBM 1401 die Operanden an der Einerstelle (bei dieser Maschine an der hohen Adresse) und arbeitet sich zur Wortmarke vor. Beim Dividieren-Befehl wird der Dividend an der höchstwertigen Stelle (der niedrigen Adresse) und der Divisor an der Einerstelle angesprochen. <a rel="nofollow" class="external text" href="http://bitsavers.informatik.uni-stuttgart.de/pdf/ibm/1410/A22-0526_1410_princOps.pdf"><i>IBM 1410 Principles of Operation</i>.</a> (PDF; 22&nbsp;MB) informatik.uni-stuttgart.de, S. 9; abgerufen am 3. November 2014.</span>
</li>
<li id="cite_note-3"><span class="mw-cite-backlink"><a href="#cite_ref-3">↑</a></span> <span class="reference-text">Dieser Zusammenhang zwischen Byte- und Bit-Reihenfolge wurde schon von <a href="#Cohen">Cohen</a> (p. 3) hergestellt.</span>
</li>
<li id="cite_note-4"><span class="mw-cite-backlink"><a href="#cite_ref-4">↑</a></span> <span class="reference-text">Der <a href="Zeichenkette#strcmp" title="Zeichenkette">Vergleich von <i>Zeichenketten</i></a> durch Maschineninstruktionen oder die C-Funktionen <code>memcmp()</code> und <code>strcmp()</code> startet auf <i>jeder</i> Maschine am <i>Anfang</i>sbuchstaben der Zeichenkette und wertet damit die Stellen niedriger Adresse als höherrangig, agiert also im Big-Endian-Stil. Man nennt diese Übertragung der Ordnung von den einzelnen Bytes auf mehrstellige Felder, wenn sie bei der ersten Stelle beginnt, die <i><a href="Lexikographische_Ordnung" title="Lexikographische Ordnung">lexikographische Ordnung</a></i>. (<span class="cite"><a rel="nofollow" class="external text" href="https://en.cppreference.com/w/c/string/byte/strncmp"><i>strncmp.</i></a> In: <i>cppreference.com.</i><span class="Abrufdatum"> Abgerufen am 26.&nbsp;März 2015</span> (englisch).</span><span style="display: none;" class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&amp;rfr_id=info%3Asid%2Fde.wikipedia.org%3AByte-Reihenfolge&amp;rft.title=strncmp&amp;rft.description=strncmp&amp;rft.identifier=https%3A%2F%2Fen.cppreference.com%2Fw%2Fc%2Fstring%2Fbyte%2Fstrncmp&amp;rft.language=en">&nbsp;</span>)<br> Die Erwähnung von Zeichenketten („Strings“) in der Literatur, z.&nbsp;B. <a rel="nofollow" class="external text" href="http://www.cs.umd.edu/class/sum2003/cmsc311/Notes/Data/endian.html"><i>Big and Little Endian</i> C-style strings</a> und <a rel="nofollow" class="external text" href="https://developer.arm.com/documentation/101655/0961/Cx51-User-s-Guide/Appendix/E--Byte-Ordering"><i>Byte Ordering</i></a>, im Kontext der Endianness beschränkt sich häufig auf die Übertragungsweise.</span>
</li>
<li id="cite_note-5"><span class="mw-cite-backlink"><a href="#cite_ref-5">↑</a></span> <span class="reference-text"><a rel="nofollow" class="external text" href="https://msdn.microsoft.com/de-de/library/system.bitconverter.islittleendian(v=vs.110).aspx?cs-save-lang=1&amp;cs-lang=cpp#code-snippet-1">msdn.microsoft.com</a></span>
</li>
<li id="cite_note-6"><span class="mw-cite-backlink"><a href="#cite_ref-6">↑</a></span> <span class="reference-text">Obwohl bspw. der <a href="C%2B%2B#C++-Compiler" title="C++">C- oder C++-Compiler</a> selbstverständlich „wissen muss“, für welchen Endianness-Typ er kompiliert, gibt es <i>keine</i> standardisierte <code>#define</code>-Konstante, die den Endianness-Typ abzufragen gestattet. <a rel="nofollow" class="external text" href="http://www.iso.org/iso/catalogue_detail.htm?csnumber=64029">ISO/IEC 14882:2014, auch bekannt als <i>C++14</i>.</a> iso.org; abgerufen am 21. Mai 2016.</span>
</li>
<li id="cite_note-7"><span class="mw-cite-backlink"><a href="#cite_ref-7">↑</a></span> <span class="reference-text">Damit der potentiell sehr viele Maschinenzyklen umfassende Befehl den <a href="Hauptprozessor" class="mw-redirect" title="Hauptprozessor">Hauptprozessor</a> nicht monopolisiert, ist er unterbrechbar konzipiert und kann nach einem <a href="Hardwareinterrupt" title="Hardwareinterrupt">Hardwareinterrupt</a> an der Stelle fortgesetzt werden, an der er unterbrochen worden ist. (Siehe <i>ESA/390 principles of operation, chapter 7-44</i> General Instructions <span class="cite"><i>SA22-7201-08 ESA/390 Principles of Operation.</i> In: <i>boulder.ibm.com.</i> Ehemals im <style data-mw-deduplicate="TemplateStyles:r250917974">
/* start https://de.wikipedia.org/ */


.mw-parser-output .dewiki-iconexternal>a{background-position:center right!important;background-repeat:no-repeat!important}body.skin-minerva .mw-parser-output .dewiki-iconexternal>a{background-image:url("./_mw_/OOjs_UI_icon_external-link-ltr-progressive.svg")!important;background-size:10px!important;padding-right:13px!important}body.skin-timeless .mw-parser-output .dewiki-iconexternal>a,body.skin-monobook .mw-parser-output .dewiki-iconexternal>a{background-image:url("./_mw_/MediaWiki_external_link_icon.svg")!important;padding-right:13px!important}body.skin-vector .mw-parser-output .dewiki-iconexternal>a{background-image:url("./_mw_/Link.ernal-small-ltr-progressive.svg")!important;background-size:0.857em!important;padding-right:1em!important}


/* end https://de.wikipedia.org/ */
</style><span class="dewiki-iconexternal"><a class="external text" href="https://redirecter.toolforge.org/?url=http%3A%2F%2Fpublibfp.boulder.ibm.com%2Fcgi-bin%2Fbookmgr%2FBOOKS%2Fdz9ar008%2F1.3.2.2%3FDT%3D20030424140937">Original</a></span> (nicht mehr online verfügbar)<span>;</span><span class="Abrufdatum"> abgerufen am 25.&nbsp;Juni 2014</span> (englisch).<span style="display:none"><a rel="nofollow" class="external text" href="http://deadurl.invalid/http://publibfp.boulder.ibm.com/cgi-bin/bookmgr/BOOKS/dz9ar008/1.3.2.2?DT=20030424140937">@1</a></span><span style="display:none"><a rel="nofollow" class="external text" href="http://publibfp.boulder.ibm.com/cgi-bin/bookmgr/BOOKS/dz9ar008/1.3.2.2?DT=20030424140937">@2</a></span><span style="display:none">Vorlage:Toter Link/publibfp.boulder.ibm.com</span> <small>(Seite nicht mehr abrufbar. <a rel="nofollow" class="external text" href="http://timetravel.mementoweb.org/list/2010/http://publibfp.boulder.ibm.com/cgi-bin/bookmgr/BOOKS/dz9ar008/1.3.2.2?DT=20030424140937">Suche in Webarchiven</a>)</small></span><span style="display: none;" class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&amp;rfr_id=info%3Asid%2Fde.wikipedia.org%3AByte-Reihenfolge&amp;rft.title=SA22-7201-08+ESA%2F390+Principles+of+Operation&amp;rft.description=SA22-7201-08+ESA%2F390+Principles+of+Operation&amp;rft.identifier=http%3A%2F%2Fpublibfp.boulder.ibm.com%2Fcgi-bin%2Fbookmgr%2FBOOKS%2Fdz9ar008%2F1.3.2.2%3FDT%3D20030424140937&amp;rft.language=en">&nbsp;</span>)</span>
</li>
<li id="cite_note-8"><span class="mw-cite-backlink"><a href="#cite_ref-8">↑</a></span> <span class="reference-text"><span class="cite"><a rel="nofollow" class="external text" href="https://en.cppreference.com/w/c/string/byte/memcmp"><i>memcmp.</i></a> In: <i>cppreference.com.</i><span class="Abrufdatum"> Abgerufen am 6.&nbsp;März 2014</span> (englisch).</span><span style="display: none;" class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&amp;rfr_id=info%3Asid%2Fde.wikipedia.org%3AByte-Reihenfolge&amp;rft.title=memcmp&amp;rft.description=memcmp&amp;rft.identifier=https%3A%2F%2Fen.cppreference.com%2Fw%2Fc%2Fstring%2Fbyte%2Fmemcmp&amp;rft.language=en">&nbsp;</span></span>
</li>
<li id="cite_note-Kueveler-Schwoch_2007-9"><span class="mw-cite-backlink"><a href="#cite_ref-Kueveler-Schwoch_2007_9-0">↑</a></span> <span class="reference-text">Gerd Küveler, Dietrich Schwoch: <cite style="font-style:italic">Informatik für Ingenieure und Naturwissenschaftler: PC- und Mikrocomputertechnik, Rechnernetze</cite>. 5. Auflage. <span style="white-space:nowrap">Band<span style="display:inline-block;width:.2em">&nbsp;</span>2</span>. Vieweg, reprint: Springer-Verlag, 2007, ISBN 978-3-8348-9191-4 (<a rel="nofollow" class="external text" href="https://books.google.de/books?id=xQbvPYxceY0C">google.de</a>).<span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rfr_id=info:sid/de.wikipedia.org:Byte-Reihenfolge&amp;rft.au=Gerd+K%C3%BCveler%2C+Dietrich+Schwoch&amp;rft.btitle=Informatik+f%C3%BCr+Ingenieure+und+Naturwissenschaftler%3A+PC-+und+Mikrocomputertechnik%2C+Rechnernetze&amp;rft.date=2007&amp;rft.edition=5.&amp;rft.genre=book&amp;rft.isbn=9783834891914&amp;rft.pub=Vieweg%2C+reprint%3A+Springer-Verlag&amp;rft.volume=2" style="display:none">&nbsp;</span></span>
</li>
<li id="cite_note-10"><span class="mw-cite-backlink"><a href="#cite_ref-10">↑</a></span> <span class="reference-text"><a rel="nofollow" class="external text" href="http://www.atmel.com/Images/doc32000.pdf"><i>AVR32 Architecture Document</i>.</a> (PDF; 5,1&nbsp;MB) Atmel, November 2007</span>
</li>
<li id="cite_note-11"><span class="mw-cite-backlink"><a href="#cite_ref-11">↑</a></span> <span class="reference-text"><span class="cite">Jeff Scheel: <a rel="nofollow" class="external text" href="https://developer.ibm.com/articles/l-power-little-endian-faq-trs/"><i>Little endian and Linux on IBM Power Systems.</i></a> Answers to your <a href="Frequently_Asked_Questions" title="Frequently Asked Questions">frequently asked questions</a>. In: <i><a href="IBM" title="IBM">IBM</a> Developer.</i> 16.&nbsp;Juni 2016,<span class="Abrufdatum"> abgerufen am 14.&nbsp;Juli 2019</span> (englisch).</span><span style="display: none;" class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&amp;rfr_id=info%3Asid%2Fde.wikipedia.org%3AByte-Reihenfolge&amp;rft.title=Little+endian+and+Linux+on+IBM+Power+Systems&amp;rft.description=Little+endian+and+Linux+on+IBM+Power+Systems&amp;rft.identifier=https%3A%2F%2Fdeveloper.ibm.com%2Farticles%2Fl-power-little-endian-faq-trs%2F&amp;rft.creator=Jeff+Scheel&amp;rft.date=2016-06-16&amp;rft.language=en">&nbsp;</span></span>
</li>
<li id="cite_note-12"><span class="mw-cite-backlink"><a href="#cite_ref-12">↑</a></span> <span class="reference-text"><span class="cite"><a rel="nofollow" class="external text" href="https://stackoverflow.com/questions/58614504/is-ios-guaranteed-to-be-little-endian"><i>Is iOS guaranteed to be little-endian?</i></a><span class="Abrufdatum"> Abgerufen am 30.&nbsp;März 2024</span> (englisch).</span><span style="display: none;" class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&amp;rfr_id=info%3Asid%2Fde.wikipedia.org%3AByte-Reihenfolge&amp;rft.title=Is+iOS+guaranteed+to+be+little-endian%3F&amp;rft.description=Is+iOS+guaranteed+to+be+little-endian%3F&amp;rft.identifier=https%3A%2F%2Fstackoverflow.com%2Fquestions%2F58614504%2Fis-ios-guaranteed-to-be-little-endian&amp;rft.language=en">&nbsp;</span></span>
</li>
<li id="cite_note-13"><span class="mw-cite-backlink"><a href="#cite_ref-13">↑</a></span> <span class="reference-text"><i><a href="#Cohen">On Holy Wars and a Plea for Peace</a></i></span>
</li>
</ol></div><!--htdig_noindex--><div><div class="zim-footer">
Dieser Artikel wurde von <a class="external text" title="Zuletzt bearbeitet am 2025-12-05" href="https://de.wikipedia.org/wiki/?title=Byte-Reihenfolge&amp;oldid=262164984">Wikipedia</a> herausgegeben. Der Text ist unter <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.de">Creative Commons Attribution-Share Alike 4.0</a> verfügbar, sofern nicht anders angegeben. Für die Mediendateien können zusätzliche Bedingungen gelten.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>
<script src="./_webp_/webpHandler.js"></script>

</body></html>